package com.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * Map的 `putIfAbsent( )` 和 `put( )` 区别
 * 1. put在放入数据时，如果放入数据的key已经存在与Map中，最后放入的数据会覆盖之前存在的数据，
 *
 * 2. putIfAbsent在放入数据时，如果存在重复的key，那么putIfAbsent不会放入值。
 * putIfAbsent 如果传入key对应的value已经存在，就返回存在的value，不进行替换。如果不存在，就添加key和value，返回null。
 */
public class PutAndPutIfAbsent {
    public static void main(String[] args) {
        HashMap<Integer, Integer> map = new HashMap<>();
        HashMap<Integer, Integer> map2 = new HashMap<>();
        map.put(1, 1);
        map.put(2, 2);
        map.put(1, 3);
        System.out.println(map);//{1=3, 2=2}

        map2.putIfAbsent(1, 1);
        map2.putIfAbsent(2, 2);
        map2.putIfAbsent(1, 3);
        System.out.println(map2);//{1=1, 2=2} 不会替换

        HashMap<Integer, List<Integer>> map3 = new HashMap<>();
        map3.putIfAbsent(1, new ArrayList<>());
        map3.get(1).add(1);

        map3.putIfAbsent(2, new ArrayList<>());
        map3.get(2).add(1);

        map3.putIfAbsent(2, new ArrayList<>());
        map3.get(2).add(2);
        System.out.println(map3);
    }
}
